home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 6
/
CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso
/
cucd
/
prog
/
gnu-c
/
include
/
sys
/
tracecntl.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-17
|
3KB
|
79 lines
/*
* This file is part of ixemul.library for the Amiga.
* Copyright (C) 1991, 1992 Markus M. Wild
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _SYS_TRACECNTL_H
#define _SYS_TRACECNTL_H
#include <sys/types.h>
#include <sys/syscall.h>
#include <exec/ports.h>
struct trace_packet {
struct Message tp_message;
struct MsgPort *tp_tracer_port; /* set this up before INSTALL !! */
int tp_flags; /* currently ignored, *must* be 0 !! */
pid_t tp_pid; /* pid, or 0 to trace all but self */
enum _syscall_ tp_syscall; /* sc, or 0 to trace all */
/* these are the arguments filled in on a trace message */
int tp_is_entry; /* true when entry, false when exit */
int *tp_argv; /* arguments of the function.
argv[0] is always the syscall,
argv[1] is the result if !tp_is_entry,
now follows the return address in
the program that did this call, then
the following elements are the
arguments to the function */
int *tp_errno; /* the address of the process errno */
/* here you can specify actions to be performed when you reply to this msg */
int tp_action; /* available values see below */
};
#define TRACE_ACTION_JSR 1 /* jsr into the syscall, and trace
result (with tp_is_entry == 0) */
#define TRACE_ACTION_JMP 0 /* jmp into the syscall, no result trace */
#define TRACE_ACTION_RTS -1 /* causes the syscall to return with
the value in argv[0] without actually
performing the call */
#define TRACE_ACTION_ABORT 2 /* causes the process to call abort() */
/* these are the commands available in tracecntl (): */
enum trace_cmd {
/* install a trace handling packet. for INSTALL_TRACE_HANDLER you
have to initialize :
tp_tracer_port here's where the packet is sent
tp_pid get notice for this pid (0 for all)
tp_syscall get notice for this syscall (0 for all)
*/
TRACE_INSTALL_HANDLER,
/* remove the installed packet. Don't (!) do this if the handler
is expecting a reply from you. */
TRACE_REMOVE_HANDLER,
/* to be extended ;-)) */
};
/* results:
0: handler installed
-1: handler not installed, library configured without tracecntl support */
int tracecntl (enum trace_cmd, struct trace_packet *);
#endif /* _SYS_TRACECNTL */